function a1(...x) {
}
function a2(...a) {
}
function a3(...a) {
}
function a4(...a) {
}
function a5(...a) {
}
function a9([a, b, [[c]]]) {
}
function a10([a, b, [[c]], ...x]) {
}
function a11([a, b, c, ...x]) {
}
var array = [
    1,
    2,
    3
];
var array2 = [
    true,
    false,
    "hello"
];
a2([
    ...array
]);
a1(...array);
a9([
    1,
    2,
    [
        [
            "string"
        ]
    ],
    false,
    true
]); // Parameter type is [any, any, [[any]]]
a10([
    1,
    2,
    [
        [
            "string"
        ]
    ],
    false,
    true
]); // Parameter type is any[]
a10([
    1,
    2,
    3,
    false,
    true
]); // Parameter type is any[]
a10([
    1,
    2
]); // Parameter type is any[]
a11([
    1,
    2
]); // Parameter type is number[]
// Rest parameter with generic
function foo(...a) {
}
foo("hello", 1, 2);
foo("hello", "world");
var E2;
(function(E) {
    E[E["a"] = 0] = "a";
    E[E["b"] = 1] = "b";
})(E2 || (E2 = {
}));
var E11;
(function(E1) {
    E1[E1["a"] = 0] = "a";
    E1[E1["b"] = 1] = "b";
})(E11 || (E11 = {
}));
function foo1(...a) {
}
foo1(1, 2, 3, E2.a);
foo1(1, 2, 3, E11.a, E2.b);
